package com.ngc.mall.logic;

import com.ngc.mall.bo.AuthRequest;
import com.ngc.mall.bo.AuthResponse;
import com.ngc.mall.bo.UserJoinNoticeRequest;
import com.ngc.mall.common.configure.WebSocketUtil;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

import javax.websocket.Session;

/**
 *
 * websocket token身份认证处理器
 * @author: chenxiaolin
 * @date 2023/11/7 14:43
**/
@Component
public class AuthMessageHandler implements MessageHandler<AuthRequest> {

    @Override
    public void execute(Session session, AuthRequest message) {
        // 如果未传递 accessToken
        if (StringUtils.isEmpty(message.getAccessToken())) {
            WebSocketUtil.send(session, AuthResponse.TYPE,AuthResponse.builder().code(1).message("认证 accessToken 未传入").build());
            return;
        }

        // 添加到 WebSocketUtil 中
        WebSocketUtil.addSession(session, message.getAccessToken()); // 考虑到代码简化，我们先直接使用 accessToken 作为 User

        // 判断是否认证成功。这里，假装直接成功
        WebSocketUtil.send(session, AuthResponse.TYPE, AuthResponse.builder().code(0).build());

        // 通知所有人，某个人加入了。这个是可选逻辑，仅仅是为了演示
        WebSocketUtil.broadcast(UserJoinNoticeRequest.TYPE,
                UserJoinNoticeRequest.builder().nickname(message.getAccessToken()).build()); // 考虑到代码简化，我们先直接使用 accessToken 作为 User
    }
//    @Override
//    public void execute(Session session,AuthRequest message) {
//        // 如果未传递 accessToken
////        if (StringUtils.isEmpty(message.getAccessToken())) {
////            WebSocketUtil.send(session, AuthResponse.TYPE,AuthResponse.builder().code(1).message("认证 accessToken 未传入").build());
////            return;
////        }
//        Long uid= LocalUser.getLocalUser().getId();
//        if(Optional.ofNullable(uid).isEmpty()){
//            WebSocketUtil.send(session, AuthResponse.TYPE,AuthResponse.builder().code(1).message("该用户不存在").build());
//            return;
//        }
//        var result=WebSocketUtil.checkSession(session,uid);
//        if(!result){
//            WebSocketUtil.send(session, AuthResponse.TYPE,AuthResponse.builder().code(2).message("该用户已经加入会话").build());
//            return;
//        }
//        // 添加到 WebSocketUtil 中
//        WebSocketUtil.addSession(session,uid); // 考虑到代码简化，我们先直接使用 accessToken 作为 User
//
//        // 判断是否认证成功。这里，假装直接成功
//        WebSocketUtil.send(session, AuthResponse.TYPE, AuthResponse.builder().code(0).build());
//
//        // 通知所有人，某个人加入了。这个是可选逻辑，仅仅是为了演示
//        WebSocketUtil.broadcast(UserJoinNoticeRequest.TYPE,
//                UserJoinNoticeRequest.builder().uid(uid).build()); // 考虑到代码简化，我们先直接使用 accessToken 作为 User
//    }

    @Override
    public String getType() {
        return AuthRequest.TYPE;
    }

}